package com.jxtc.enterprise.common.utils;

import org.springframework.util.StringUtils;

/**
 * 响应生成工具
 */
public class ResultGenerator {
    private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";

    private static final String DEFAULT_FAIL_MESSAGE = "FAIL";

    /**
     * 默认成功返回（code: 200, msg: "SUCCESS", data: null）
     *
     * @param <T> data的数据类型
     * @return 返回成功信息 200
     */
    public static <T> Result<T> genSuccessResult() {
        return new Result<T>()
                .setCode(ResultCode.SUCCESS)
                .setMessage(DEFAULT_SUCCESS_MESSAGE);
    }

    /**
     * 返回成功信息（code: 200, msg: "SUCCESS", data: data）
     *
     * @param data 返回数据
     * @param <T>  data的类型
     * @return 成功信息
     */
    public static <T> Result<T> genSuccessResult(T data) {
        return new Result<T>()
                .setCode(ResultCode.SUCCESS)
                .setMessage(DEFAULT_SUCCESS_MESSAGE)
                .setData(data);
    }

    /**
     * 返回成功信息（code: 200, msg: msg, data: data）
     *
     * @param data 返回数据
     * @param msg  响应信息
     * @param <T>  data的类型
     * @return 成功信息
     */
    public static <T> Result<T> genSuccessResult(T data, String msg) {
        return new Result<T>()
                .setCode(ResultCode.SUCCESS)
                .setMessage(msg)
                .setData(data);
    }

    /**
     * 默认失败返回（code: 400, msg: msg, data: null）
     *
     * @param <T> data的数据类型
     * @param msg 失败信息
     * @return 失败信息
     */
    public static <T> Result<T> genFailResult(String msg) {
        String message = StringUtils.hasText(msg) ? msg : DEFAULT_FAIL_MESSAGE;
        return new Result<T>()
                .setCode(ResultCode.FAIL)
                .setMessage(message);
    }

    /**
     * 返回错误信息（code: code, msg: "FAIL", data: null）
     *
     * @param code 错误码
     * @param <T>  data的数据类型
     * @return 错误信息
     */
    public static <T> Result<T> genFailResult(ResultCode code) {
        return new Result<T>()
                .setCode(code)
                .setMessage(DEFAULT_FAIL_MESSAGE);
    }

    /**
     * 返回错误信息（code: code, msg: msg, data: null）
     *
     * @param <T>  data的数据类型
     * @param code 错误码
     * @param msg  错误信息
     * @return 错误信息
     */
    public static <T> Result<T> genFailResult(ResultCode code, String msg) {
        return new Result<T>()
                .setCode(code)
                .setMessage(msg);
    }
}
